Introduction of Transfer Learning

Transfer Learning (TL)

  1. Similar domain, Different task
  2. Different domain, Similar task

Q : 能不能在有些不相干的data情況下,來幫助我們現在要做的task.

Why?
ex1. 台語語音辨識(data少),但英文、中文的語音相對容易取的。
ex2. 醫療影像辨識(有無腫瘤),實際其他圖片的data網路上一堆。
ex3. 分析法律文件,網路上其他文件是否有幫助?

TL Example in real life:
漫畫家 -> 責編 -> 畫分鏡 -> 投稿jump
研究生 -> 指導教授 -> 跑實驗 -> 投稿期刊

我們只會介紹 Source Data 有 label 的部分。

Labelled Source & Labelled Target Data

Model Fine-tune

Task description:
target data : $(x^{t}, y^{t}) \rightarrow$ very little
source data : $(x^{s}, y^{s}) \rightarrow$ A large Amount

One-shot learning: only a few examples in target domain

Example : Speaker Adaption

target data: audio data and its transriptions of specific user.
source data: audio data and transriptions from many speakers.

Main Idea :

Training the model by source data, then fine tune the model by target data.
**Challenge : Only limited target data, so be careful about overfitting.

How to prevent overfitting ?

1. Conservarive Learning

假設現在有大量的source data假設在語音辨識裡他就是很多不同speaker的聲音都有transciption,就可以拿來train一個語音辨識的neural network。接下來,你有target data,可能只有五句或十句這麼多,如果直接把這些target data去train一個model想必因該是不可行的。這時候在train的時候就可以設定一些限制,讓train完的新model跟舊model不要差太多,那就是新的model跟舊的model看到同一筆data的時候,他們的output越接近越好。或者也可以把constraint放在兩者model他們之間的weight L2 norm越接近越好。

2. Layer Transfer

source data只需考慮很少的參數,就可以避免overfitting的情形。 當source data量一多也可以考慮fine-tune整個model.

Q : Which layer can be transferred (copy)?

Speech : usually copy the last few layers.

每一個人,他用同樣的發音方式,因為口腔結構略有差異,得到的聲音不同。前面幾層layer主要在看語者說話的發音方式,再根據發音方式得到現在説的詞彙,達到辨識結果。所以從發音方式到辨識結果後面幾層layer是跟語者沒關係的可以被copy,不一樣在於從聲音訊號到發音方式這一段,可能是每個人都不一樣。

Image: usually copy the first few layers.

因為CNN前面幾層所做的就是detect最簡單的pattern,像是橫線、直線,或者有沒有簡單的幾何圖形。所以在CNN前幾層learn的東西,是可以transfer到其他task上。
而最後幾層learn的東西往往比較具體,他就無法transfer到其他task上

Multi-task learning

與fine-tune不同,fine-tune在意target domain做得好不好,不管source domain. Multi-task learning是考慮能不能同時做好。

好處在於,taskA 與 taskB 前面幾層是共用的。前面幾層是用比較多data訓練的,所以可能會有比較好的performance。
前提:這兩個task必須是有共通性的,是不是可以共用前面幾個layer。

另外,input無法share。兩種不同的input都用不同的神經網路把它transfrom到相同domain上,在apply不同的神經網路,一個做taskA,另一個做taskB。如果你覺得這兩個task中間有共同地方的話。

Example:

一大堆不同語言data。可以訓練一個模型同時辨識五種不同語言。前面幾個layer共用參數,後面幾個layer每一個語言會有自己的參數。雖是不同語言,但都為人類說的,前面幾個layer就可以share相同資訊,可以共用相同的參數

Q: Transfer 是否會造成負面效果?

有可能,如果兩個task不相近就會有可能造成這樣的結果。但總是思考能不能transfer, try & error太浪費時間的。

Progressive neural netwok

task 2 他的每一個hidden layer都接前面task 1 某一個hidden layer的output。所以他的好處在於,就算task 1與task 2不像也能夠進行training。

首先,task 2的model不會去動到task 1的model,所以task1一定不會變得比較差。再來,task 2去借用task 1的參數,但是可以把他借來的參數直接設成0,這樣也不會影響task 2 的performance。最糟的情況就是跟自己train的performance是差不多的。

所以說如果有5個task不就要接前面4個task嗎?那這篇作者自己也覺得很怪等待別人提出想法~~~~

Labelled Source & Unlabelled Target Data

Task description:

Source data : $(x^{s}, y^{s}) \rightarrow$ training data
Target data : $(x^{t}) \rightarrow$ testing data

Main problem:


Training data and testing data are mismatch.
如何在Source data上的model直接apply在別的Target data上也可以運行呢?

Domain Adversarial training

不應該是兩個不同domain的feature分成兩群,而是不同domain的feature要被混雜再一起。把不同domain的特性給消除。Domain classifer主要就在辨別feature $f$ 是在哪一個domain裡面。
前面feature extractor有點類似GAN generator的output,然後domain classifier就是descriminator的結果,使得整個架構很像GAN。
但在這邊,你只是把feature混在一起,根本無法進行數字分類,因此整體的Domain Adversarial training長得像這樣:

藍色的部份希望把class分得越精準越好,粉紅色的部分則是希望能準確預測input x 屬於哪一個domain。
那feature extractor要做的事情就是同時imporve label predictor的accuray,同時也要minimize domain classifer的accuracy,希望把類別分類做到最好,同時也要移除掉不同domain的特性。

如何移除domin的特型,在做back propagation的時候,多加一個gradient reversal layer把domain classifier的gradient取負號回傳給前面的feature extractor就以簡單做到了。
$\textbf但重要的問題來了$: traget data根本沒label那要怎麼train label classifier? 根據paper我覺得是,target data不會參與label classifier的training。也就是說在train model時,target data的作用只會在domain classifier 的loss上。(這是我看他sudo code覺得因該是這樣,因為他沒細講QQ)

Zero-shot Learning

Zero-shot learning對於domain的要求更嚴苛一點,他的define是source data 和 target data的task是不一樣的,不像先前是對不同doamin下的數字進行辨識。

example :
Source data $(x^{s}, y^{s})$ 都是貓和狗圖片。
Target data $(x^{t})$ 是草泥馬的圖片,在Source data中是沒看過的。

語音上很常遇到這樣的問題。
假設,把不同的word都當作是一個詞彙一個class,本來在training和testing中就很長有可能看到不同的詞彙。在語音上的做法是,不要直接判斷這一段聲音屬於哪一個word,而是判斷這一段聲音屬於哪一個phoneme(音位,是人類語言中能夠區別意義的最小聲音單位,是音位學分析的基礎概念),之後在根據人類的知識在做一個phoneme與文字對應關係的table。 在辨識的時候,只要辨識出phoneme就好,再去查表看看這一段phoneme對應到哪一個word。 因此就算有些word在training data沒看過,只要他在你建的lexicon(詞典)有出現過,model就可以辨識聲音屬於哪一個phoneme的話。

那在圖片上,我們可以把每一個class用他的attribute來表示。每一個class最好有獨一無二的attribute。 在training的時候,我們output的是圖片的特徵而不是類別。

所以當有一個從沒在training set出現過的圖片,我們就透過model找出他的特徵,並且查表來找哪一個和output的最接近(不一定會一樣),那那個動物就是要找的。

有時後,我們產生的attribute可能很複雜,dimension可能很大,這時候我們就能夠做attribute的embedding。我們就把每一個training data的image都透過一個transform變成embedding space上的一個點,然後也把每個image對應的attribute也都變成embedding space上得點。$f$和$g$可以想像成是兩個不同的NN。在training時會希望$f(x^{n})$和$g(y^{n})$越接近越好。如此一來在testing時,當有一個不在training data上的圖片,我們就把這個image的attribute轉變至embedding space看哪個動物在embedding space和他最相近。

但在這邊會牽涉到一個問題,如果我根本沒有database紀錄動物的attribute呢?
A: 借用word vector

word vector的給個dimension就代表這個word的某種attribute,所以不一定需要一個database跟你說每一個動物的attribute是什麼。假設你知道每個動物他對應的word的word vector(例如説從很大量的corpse wikipedia train出來),那就可以直接把attribute直接換成word vector,再做剛剛的embedding就OK了。

那在learn zero-shot的時候需要注意一些事情。如果我們單純只用第一個式子只要求$f(x^{n})$跟$g(y^{n})$越近越好,解出來你就會發現最後的結果是 $\forall n, f(x^{n})=g(y^{n})$,那顯然這不是我們要的結果。

所以在定loss function時我們因該還要考慮$x^{n}$跟$y^{m}$如果不是同一個pair,那麼他們再embedding space得距離因該要越大越好,於是就有了第二個式子。這裡的$k$代表的是margin,再training時必須事先設定好。那我們來看看後面summation什麼時候會是zero-loss呢,只有當後面那一長串小於0的時候。那我們把後面那一長串小於0做一下整理,我們便可以清楚知道這一長串的含義是什麼:

“當$f(x^{n})$與$g(y^{n})$他的inner product都大於$f(x^{n})$與其他任一$g(y^{m}) k$個單位”

因此,如果定這樣一個loss function,不只把同一個pair起來的attribute跟image拉近,同時也要把不成pair的拆開。

其實還有一個更簡單的zero-shot learing方法。這個方法就是說,我們也不需要任何的learning。假設現在有一個現成的Imagenet model跟word vector,把一張圖丟到NN他覺得有0.5的機率是lion,0.5的機率是tiger,就把lion跟tiger的word vector比例用1:1混合,在看哪個word和word vector的混合結果最近。那可以發現最接近的就是liger(獅虎)。

之前我們都是舉圖片的例子,我們再舉一個speech在zero-shot learning的例子。
下面這是google做的一個實驗,這是在做machine translation。machine看過如何把英文翻成韓文,也知道怎麼把韓文翻成英文,也知道怎麼把英文翻譯成日文,也知道怎麼把日文翻成英文,有這些data。但machine從沒看過日文翻韓文跟韓文翻日文,但是他卻可以翻。

為什麼zero-shot learning在這樣的task是可行的?
因為如果用同一個model做了不同語言之間的translation,他可以學到不同語言的句子project到相同的space上,而在這個space上他們是language independent的,在這space上,只跟句子的semantic有關。

這個是paper説根據learn好的translator。translator會有一個encoder,會把input轉換成一個vector,一個decoder根據這個vector解回翻譯的結果。如果把不同語言都丟進這個encoder裡頭,讓它變成vector的話,這些不同語言的不同句子,在這個space上的分佈關西會有什麼關係?

比如說圖上有三個句子分別是英文、韓文以及日文的句子,這三個句子講的都是同樣的事情,是一樣的意思。通過encoder,可以發現它們都在space上都在差不多的位置。左邊(a)圖不同顏色代表是說這些句子都來自相同意思,但可能來自不同語言。machine做到的事情就是,他發現一種sequence language,對每一個語言,都先轉換成只有machine自己知道的 sequence language,就算是有某一個task,input跟output是machine沒看過的,它也可以透過自己學出的sequence language來做translation。

Q & A

感謝觀看~~~

Powered by Hexo and Hexo-theme-hiker

Copyright © 2020 - 2021 DSMI Lab's website All Rights Reserved.

UV : | PV :